Hello, 各位 iT 邦幫忙 的粉絲們大家好~~~
在本系列文因為工作上的產品應用需求,進而探索到很多層面的點滴事。
透過每篇 EP 的分享把這些點滴整理,看起來或許像是個獨立的小品抒發文、也或許是一系列技術研究文!?
總之,就當作的隨手雜記文吧!
本篇是 莫名其妙就跟世界等級的 OpenSource 專案攪和了!? 系列文的 EP22。
Avalonia UI 自 11.0.0 的版本 (2023/07/05) 推出後,可說是宣告為正式的 Avalonia UI 穩定版本。
若需要從 0.x.x 升級時,需要 Avalonia UI 參考 Upgrading from 0.10:
https://docs.avaloniaui.net/docs/stay-up-to-date/upgrade-from-0.10
進行相關調整。
在把 GstreamerPlayer 的 Avalonia UI 相關的 Nuget 套件升級到目前 (2025/10/03) 最新的 11.3.7 版本之後,進行了以下的介紹處理。
首先,在原本的 GstreamerPlayer 的專案中的 "Program.cs" 有用到 LogToDebug(),這個就直接改成 LogToTrace(),並將 using Avalonia.Logging.Serilog; 的這個 using 移除。
再者,在該專案中的 "MainWindow.axaml.cs" 當中的 "this.AttachDevTools();" 再升級到 11.x.x 之後會遇到找不到此方法;透過安裝 "Avalonia.Diagnostics" 這個 nuget 套件即可解決此問題。
在 MainWindow.axaml.cs 的 urisOfChoice.Items 的錯誤,則修正為 urisOfChoice.ItemsSource。
繼續處理的是 "App.axaml" 當中指定 Application.Styles 的部分也已經遺失,透過安裝 "Avalonia.Themes.Fluent" 這個 nuget 套件,並把原本使用 Style 的設定更換成 "FluentTheme" 的使用,即可解決此問題。
再看到 FrameRenderer.cs 當中的問題,修正如下手法:
最後,則是找不到 "Avalonia.Rendering.UiThreadRenderTimer" 的建構方法,查看定義後發現在 11.0.0 之後,此類別已經被標註為 PrivateApi。
查看 Aavlonia UI 的官方說明後,這也不是沒有解決的辦法:
Using private apis in nuget packages
但要使用就要自行確認其相容性與穩定性。
開啟 GstreamerPlayer 的專案檔進行編輯:
並注意到下方會出現 AVA3001 的警告。
所以 Avalonia 的 nuget 版本才特別撰寫版本的升級限制,此做法可參考微軟官方文件 "Package versioning" 的介紹:
https://learn.microsoft.com/zh-tw/nuget/concepts/package-versioning
重新編譯執行該 GstreamerPlayer 專案,兩個主要 URI、Local File 的影片播放部份都沒太大問題。
若有興趣上述變更的差異,可到 GitHub 的 gstreamer-sharp-netcore 存放庫觀看此 Commit:
https://github.com/JamestsaiTW/gstreamer-sharp-netcore/commit/2a11eaf960cf916862002fdf78ebc83ee91524dd